//
//  RSStatusViewModel.swift
//  RSWeibo
//
//  Created by Macx on 16/8/13.
//  Copyright © 2016年 Macx. All rights reserved.
//

import UIKit

class RSStatusViewModel: NSObject {
    
    // 微博数据模型
    var statusModel: RSStatusesModel?
    
    
    // 转发数内容
    var reweetCountConten: String?
    // 评论数内容
    var commentCountConten: String?
    // 赞数内容
    var unlikeCountContent: String?
    
    // 微博来源
    var sourceContent: String?
    
    // 转发微博内容
    var retWeetContent: String?
    
    // 微博等级
    var mbRankImg: UIImage?
    
    // 微博等级
    var verifiedTypeImg: UIImage?
    
    // 发布时间
    /*
     //  判断时间是否是今年
              //  判断是否是今天
                    //  判断是否是1分钟之内
                          //  - 刚刚
                   //  判断是否是1小时之内
                          //  - xx分钟前
                   //  其它
                          //  - xx小时前
     //  判断是否是昨天
              //  - 昨天 10:10
     //  其他
             08-14 08:41
     //  不是今年
            //  2015-10-20 20:10
     
     */
     // 处理 时间格式 "Mon Aug 15 12:35:03 +0800 2016"
    var creatTimeContent: String? {
    
        // 判断
        guard let creatDateStr = statusModel?.created_at else {
            
            return nil
        }
        
        // 创建一个规定时间格式的对象
        
        let dateForm = NSDateFormatter()
        // 确定具体的格式
        dateForm.dateFormat = "EEE MMM dd HH:mm:ss zz yyyy"
        // 指定本地化信息
        dateForm.locale = NSLocale(localeIdentifier: "en_US")
        
        // 通过格式化, 将字符串对象转化成时间对象
        let creatDate = dateForm.dateFromString(creatDateStr)!
        
//        print("时间如此", creatDate)
        
        // 判断是否是当前时间
        if isThisYear(creatDate) {
            
            // 创建一个 当前日历类对象
            let calender = NSCalendar.currentCalendar()
            
            // 如果是今年, 则分是否今天, 是否昨天, 以及其他时间
            
            
            if calender.isDateInToday(creatDate) {
                
                // 是今天, 分三种情况, 一分钟之内, 一小时之内, 一小时之外
                // 先将创建时间跟当前时间进行对比, 有两种方法, 但是第二种比较方便
                // abs 是取绝对值
//                let timeSinceNow = creatDate.timeIntervalSinceDate(<#T##anotherDate: NSDate##NSDate#>)
                let timeSinceNow = abs(creatDate.timeIntervalSinceNow)
                if timeSinceNow < 60 {
                    // 一分钟之内
                    return "刚刚"
                } else if timeSinceNow < 3600 {
                
                    // 一小时之内
                    let result = timeSinceNow / 60
                    return "\(Int(result))分钟前"
                } else {
                
                    let result = timeSinceNow / 3600
                    return "\(Int(result))小时前"
                }
                
                
            }else if calender.isDateInYesterday(creatDate){
            
                // 是昨天
                dateForm.dateFormat = "昨天 HH:mm"
                
            }else{
            
                // 既不是昨天也不是今天
                dateForm.dateFormat = "MM-dd HH:mm"
            }
            
        }else{
        
            // 如果不是今年, 格式化的方式如下
            dateForm.dateFormat = "yyyy-MM-dd HH:mm"
        }
        
        // 返回格式化之后的时间, 是字符串对象
        return dateForm.stringFromDate(creatDate)
        
    }
    
    
    // 通过重载构造函数初始化当前的对象
    init(statusModel: RSStatusesModel?) {
        super.init()
        // 传进来的参数赋值给属性
        self.statusModel = statusModel
        
        /*
         在 viewModel 对请求回来的数据进行处理, 然后传递给 model, model 中不参与数据的处理
         */
        // 处理转发数内容
        reweetCountConten = handleContent((statusModel?.reposts_count)!, defaultTitle: "转发")
        commentCountConten = handleContent((statusModel?.comments_count)!, defaultTitle: "评论")
        unlikeCountContent = handleContent((statusModel?.attitudes_count)!, defaultTitle: "赞")
        
        // 处理来源数据
        handleSourceContent(statusModel?.source ?? "")
        
        // 处理 转发内容微博
        handleRetweetContent(statusModel!)
        
        // 处理微博等级的
        handleMbRankImg(statusModel?.user?.mbrank ?? 0)
        
        // 处理微博认证类型
        handleVerifiedTypeImg(statusModel?.user?.verified_type ?? 0)
        
//        print(creatTimeContent)
    }
    
    // 判断是否是今年的时间
    private func isThisYear(createDate: NSDate) -> Bool{
    
        // 取到年份(也是通过格式化方式)
        let yearDateForm = NSDateFormatter()
        
        // 指定格式化方式, 取到年份
        yearDateForm.dateFormat = "yyyy"
        
        // 指定本地化信息
        yearDateForm.locale = NSLocale(localeIdentifier: "en_US")
        
        // 获取发微博的年份
        let creatYear = yearDateForm.stringFromDate(createDate)
        
        // 获取当前年份
        let currentYear = yearDateForm.stringFromDate(NSDate())
        
        // 返回两者的对比
        return creatYear == currentYear
        
    }
    
    
    // 处理 认证等级图片
    private func handleVerifiedTypeImg(verrifiedType: Int){
    
         //认证类型等级 -1 没有认证 ，0 认证用户，2，3，5 企业认证 ， 220 达人
        switch verrifiedType {
        case 0:
            verifiedTypeImg = UIImage(named: "avatar_vip")
        case 2,3,5:
            verifiedTypeImg = UIImage(named: "avatar_enterprise_vip")
        case 220:
            verifiedTypeImg = UIImage(named: "avatar_grassroot")
        default:
            verifiedTypeImg = nil
        }
        
    }
    
    // 处理微博等级的图片显示
    private func handleMbRankImg(mbrank: Int){
        
        // 设置判断, 会安全点
        if mbrank >= 1 && mbrank <= 6 {
            
            // 拼接字符串
            mbRankImg = UIImage(named:"common_icon_membership_level\(mbrank)")
            
        }
        
    }
    
    // 处理微博来源
    private func handleSourceContent(source: String){
    
        // 先判断 微博来源是否存在
        if source.containsString("\">") && source.containsString("</") {
            
            // 设定开始光标位置
            let startIndex = source.rangeOfString("\">")?.endIndex
            // 结束位置
            let endIndex = source.rangeOfString("</")?.startIndex
            
            // 截取来源的字符串
            let sourceStr: String = source.substringWithRange(startIndex!..<endIndex!)
            
//            print("哈哈哈哈哈" + sourceStr)
            
            sourceContent = "来自 " + sourceStr
            
        }
    }
    
    // 处理 转发微博 内容
    private func handleRetweetContent(statusModel: RSStatusesModel) {
    
        // 先判断是否有转发微博
        if statusModel.retweeted_status != nil {
            // 有转发微博的时候

            
            guard let contentText = statusModel.retweeted_status?.text, let name = statusModel.retweeted_status?.user?.screen_name else {
            
                return
            }
            
            // 执行到这里, 说明上面都正确
            let resultStr = "@\(name)\(contentText)"
            
//            print(resultStr)
            
            retWeetContent = resultStr

        }
    }
    
    // 处理 转发, 评论, 赞 数的逻辑
    private func handleContent(count: Int, defaultTitle: String) -> String{
    
        if count > 0 {
            if count > 10000 {
                let result = CGFloat(count/1000)/10
                
                var resultStr = "\(result)万"
                
                // 判断字符串是够包含0
                if resultStr.containsString(".0") {
                    resultStr = resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
//                print("&&&&&&&&&",resultStr)
                return resultStr
                
            }else{
            
                return "\(count)"
            
            }
        }else{
        
            return defaultTitle
        }
        
    }
    
    
    
    

}
